package com.gscitysfy.cus.drain.modules.common.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gscitysfy.cloudfrmwk.filestrg.model.MinioResp;
import com.gscitysfy.cloudfrmwk.filestrg.utils.FileTypeUtils;
import com.gscitysfy.cus.drain.modules.common.entity.DrainInspectionMnFile;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @author 葛守跃
 * @version 1.0.0
 * @ClassName FileService
 * @Description 文件操作接口
 * @creatTime 2022/3/24 10:39
 */
public interface IFileService extends IService<DrainInspectionMnFile> {

    /**
     * 上传文件至minio
     * @param file
     * @return
     */
    DrainInspectionMnFile uploadFile(File file);

    /**
     * 上传文件至别名为alias配置的服务类
     * @param file
     * @param alias
     * @return
     */
    DrainInspectionMnFile uploadFile(File file, String alias);

    /**
     * 上传文件至minio
     * @param file
     * @return
     */
    DrainInspectionMnFile uploadFile(InputStream file);

    /**
     * 上传文件至别名为alias配置的服务类
     * @param file
     *  @param alias
     * @return
     */
    DrainInspectionMnFile uploadFile(InputStream file, String alias);

    /**
     * 文件上传至云服务器
     * @param file
     * @return
     */
    DrainInspectionMnFile uploadFile(MultipartFile file);

    /**
     * 根据文件id下载文件
     * @param fileId
     * @return
     * @throws IOException
     */
    ResponseEntity<byte[]> downloadFileByFileId(Long fileId) throws IOException;

    /**
     * 根据文件id获取文件列表，使用逗号分割
     * @param ids
     * @return
     */
    List<DrainInspectionMnFile> getFileListByIds(String ids);

    /**
     * 根据文件id获取文件列表，使用逗号分割
     * @param ids
     * @return
     */
    List<DrainInspectionMnFile> getFileListByIds(List<String> ids);

    /**
     * 根据id获取文件信息
     * @param id
     * @return
     */
    DrainInspectionMnFile getFileById(Long id);

    /**
     * 根据文件id获取文件信息
     * @param resp
     * @return
     */
    default DrainInspectionMnFile getCommonFile(MinioResp resp){
        DrainInspectionMnFile commonFile = new DrainInspectionMnFile();
        commonFile.setCmFileName(resp.getFileName());
        commonFile.setCmFileSize(resp.getFileMbSize());
        commonFile.setCmFileType(FileTypeUtils.getFileType(resp.getFileName()));

        commonFile.setCmKid(Long.valueOf(resp.getObjectName()));
        commonFile.setCmBucketName(resp.getBucketName());

        commonFile.setCmUsable(false);
        commonFile.setCmFilePreviewUrl(resp.getPreviewUrl());
        return commonFile;
    }

}
